#include <iostream>

class Test
{
public:
    Test()
    {
        std::cout << "构造函数" << std::endl;
    }
    ~Test()
    {
        std::cout << "析构函数" << std::endl;
    }
    void show()
    {
        std::cout << "helloworld\n";
    }
};

// RAII 
class SmartPoint // 智能指针 
{
public:
    SmartPoint(Test *t) : t(t) {}   // 内存托管 // 在构造里申请，在析构里释放
    ~SmartPoint()
    {
        delete t;
    }
    Test* operator->()  // 返回一个Test类型的指针
    {
        return t;
    }
    Test& operator*()    // 返回一个对Test类型的引用
    {
        return *t;  
    }
private:
    Test *t;
};

int main()
{
    SmartPoint p(new Test);

    p->show();  

    Test t = *p;
    return 0;
}

